/**
 * <b>项目名称：</b>网络应用框架<br/>
 * <b>包    名：</b>com.hhwy.framework.util<br/>
 * <b>文 件 名：</b>SetProjectBuildPath.java<br/>
 * <b>版本信息：</b><br/>
 * <b>日    期：</b>2016年11月14日-下午5:07:05<br/>
 * <b>Copyright (c)</b> 2016恒华伟业科技股份有限公司-版权所有<br/>
 * 
 */
package com.hhwy.framework.util;

import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

 /**
 * <b>类 名 称：</b>SetProjectBuildPath<br/>
 * <b>类 描 述：</b>设置当前工程的build path到plugins中当前工程插件目录下<br/>
 * <b>创 建 人：</b>liuhai<br/>
 * <b>修 改 人：</b>liuhai<br/>
 * <b>修改时间：</b>2016年11月14日 下午5:07:05<br/>
 * <b>修改备注：</b><br/>
 * @version 1.0.0<br/>
 */
public class SetProjectBuildPath {
	public static void main(String[] args) {
		try {
			System.out.println();
			System.out.println("***************start setting project build path***************");
			System.out.println("参数：");
			System.out.println("basedir:" + args[0]);
			System.out.println("pluginName:" + args[0]);
			
			String classpathFilePath = args[0] + File.separator + ".classpath";
			System.out.println("classpathFilePath:" + classpathFilePath);
			String newBuildPath = "src/main/webapp/plugins/"+args[1]+"/WEB-INF/classes";
			System.out.println("newBuildPath:" + newBuildPath);
			
			updateBuildPath(classpathFilePath, newBuildPath);
			System.out.println("***************finish setting project build path***************");
			System.out.println();
		} catch (Exception e) {
			System.out.println("更新当前工程build path失败：" + e.getMessage());
		}
	}
	
	@SuppressWarnings("unchecked")
	private static boolean updateBuildPath(String classpathFilePath, String newBuildPath) {
		SAXReader reader = new SAXReader();
		File classpathXml = new File(classpathFilePath);
		if(!classpathXml.exists()){
			System.out.println("当前工程的.classpath文件不存在");
			return false;
		}
		try {
			Document document = reader.read(classpathXml);
			String encoding = document.getXMLEncoding();
			Element rootElement = document.getRootElement();
			
			boolean isChanged = false;
			//欢迎页列表
			List<Element> classpathentryList = rootElement.elements("classpathentry");
			for(Element element : classpathentryList){
				String kind = element.attribute("kind").getValue();
				String path = element.attribute("path").getValue();
				String output = element.attribute("output") == null ? "" : 
							element.attribute("output").getValue();
				if("src".equals(kind) && "src/main/java".equals(path) && !newBuildPath.equals(output)){
					isChanged = true;
					element.addAttribute("output", newBuildPath);
				}else if("output".equals(kind) && !newBuildPath.equals(path)){
					isChanged = true;
					element.addAttribute("path", newBuildPath);
				}
			}
			if(isChanged){
				System.out.println("准备写入.classpath文件......");
				writer(document, classpathFilePath, encoding);
			}
		} catch (Exception e) {
			System.out.println("更新当前工程build path失败：" + e.getMessage());
			return false;
		}
		return true;
	}

	private static void writer(Document document, String fileUrl,
			String encoding) throws Exception {
		// 排版缩进的格式
		OutputFormat format = OutputFormat.createPrettyPrint();
		// 设置编码
		format.setEncoding(encoding);
		// 创建XMLWriter对象,指定了写出文件及编码格式
		XMLWriter writer = new XMLWriter(new OutputStreamWriter(
				new FileOutputStream(new File(fileUrl)), encoding), format);
		// 写入
		writer.write(document);
		// 立即写入
		writer.flush();
		// 关闭操作
		writer.close();
	}
}
